Для всех методов требуемых в условии
Собрать итоговую таблицу (data.frame), в которой строки соответствуют методам, а столбцы (значение функции, значение переменных, колличество вызовов функции)
x <- seq(-2, 2, by = 0.1)
y <- task1$f(x)
op <- optimise(task1$f, c(-2, 2))
data <- data.frame(x, y)
fig <- plot_ly(data, x = ~x, y = ~y, type = 'scatter', mode = 'lines', name = "Function") |>
add_markers(x = op$minimum, y = task1$f(op$minimum), color = 'red', size = 5, name = "Minimum")
fig
## Warning in RColorBrewer::brewer.pal(N, "Set2"): minimal value for n is 3, returning requested palette with 3 different levels
## Warning in RColorBrewer::brewer.pal(N, "Set2"): minimal value for n is 3, returning requested palette with 3 different levels
op$minimum
## [1] -1.032349
op$objective
## [1] -2.006044
Найти безусловный минимум функции двух переменных.
С помощью методов: Nelder-Mead, PRAXIS, BFGS, CG.
(Для градиентных методов выразить градиент самостоятельно)
Вызвать функцию можно через объект
task2$f(c(1,2))
## [1] 80.18515
Провести анализ
Найти условный минимум функции двух переменных, с ограничениями.
Решить задачу минимизации
с ограничениями
С помощью методов: cobyla, mma, ccsa, sslqp. Провести анализ.
Свести задачу условной минимизации к безусловной
Решить задачу минимизации
с ограничениями
\[\begin{cases} 3 \leq x \leq 6 \\ -7 \leq y \leq 2 \end{cases}\]
С помощью методов: Nelder-Mead, tnewton, BFGS, Rcg.
Провести анализ
Найти безусловный минимум сильно вытянутой вдоль функции двух переменных
Вызвать функцию можно через объект
task2$f(c(1,2))
## [1] 80.18515
С помощью методов: Nelder-Mead, tnewton, BFGS, varmetric. Провести анализ
Провести анализ для всех предложенных функций (n=50,100,500,1000) \[F=(\sum_{i=1}^N{L_ix_i}-b)^2\]
Вызвать функцию можно через объект
task6$f50(runif(50))
## [1] 7217.512
Гиперэллипсоиды для 50, 100, 1000 переменных. С помощью методов: Nelder-Mead, tnewton, BFGS, Rcg.
найти минимум любым доступным методом (реализованным в R), для 3-ех функций из репозитория
Провести анализ.
task7_gen <- function()
{
set.seed(base_seed + 7)
get_fun <- function(path)
{
source(path, local = TRUE)
as.list(environment())
}
l <- lapply('Box' |> dir(recursive = TRUE, full.names = TRUE) |> sample(3), get_fun)
names(l) <- sapply(seq_len(3), \(i) paste0('t', i))
l
}
task7 <- task7_gen()
Рассмотрим пример. Ограничения для функции
task7$t1$get_xl(2)
## [1] -500 -500
task7$t1$get_xu(2)
## [1] 500 500
Минимальное значение функции и аргумент при котором оно реализуется
task7$t1$get_xmin(2)
## [1] 0.5 -0.5
task7$t1$get_fmin(2)
## [1] -2000.004
task7$t1$ChenV(c(10,10))
## [1] -1000
Саму функцию можно получить
task7$t1$ChenV
## function (x)
## {
## if (missing(x)) {
## return(list(nx = 2, ng = 0, nh = 0, xl = function(nx) get_xl(nx),
## xu = function(nx) get_xu(nx), fmin = function(nx) get_fmin(nx),
## xmin = function(nx) get_xmin(nx), features = c(1,
## 0, 0, 1, 0, 0, 0, 1), libraries = c(0, 0, 0,
## 0, 1, 0, 0, 0, 0, 0)))
## }
## y <- -(0.001/(0.001^2 + (x[1]^2 + x[2]^2 - 1)^2)) - (0.001/(0.001^2 +
## (x[1]^2 + x[2]^2 - 0.5)^2)) - (0.001/(0.001^2 + (x[1]^2 -
## x[2]^2)^2))
## return(y)
## }
## <environment: 0x000001a2be86ccc8>
Вызов функции
task7$t1$ChenV(c(1,1))
## [1] -1000.001